Дефорестизационные Интерпретаторы O2
Тут NPONECCOP говорит, что наши JIT интерпретаторы говно, вручную мы аллоцируем регистры или через LLVM калейдоскоп, и что надо делать интерпретаторы с реврайт рулами которые делают фьюжин на стадии прекомпиляции. Такие интерпретаторы надо выделить в отдельный класс О2, например, а О класс пускай включает в себя все нормальные интерпретаторы, включая CPS и JIT.
Примеры элиминаторов или правила дефостеризации для стримов и листов:
stream (unstream s) = s
foldr k z (build g) = g k z
where
foldr f z [] = z
foldr f z (x:xs) = f x (foldr f z xs)
build g (:) []
stream :: List -> Stream
unstream :: Stream -> List
Приложения в промышленности: векторизация, SIMD конвеерация
__________________
[1]. https://github.com/flypy/flypy/blob/master/docs/source/fusion.rst#id19
[2]. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.36.5748&rep=rep1&type=pdf
[3]. http://citeseer.ist.psu.edu/viewdoc/download?doi=10.1.1.421.8551&rep=rep1&type=pdf